package org.mysterylab.utopiaframework.commons.compass.command;

import org.apache.commons.lang.StringUtils;
import org.compass.core.CompassQuery.SortDirection;
import org.compass.core.CompassQuery.SortPropertyType;
import org.springframework.util.Assert;

/**
 * 封装基于 Compass 的排序参数.
 * 
 * @author zhouych
 */
public class CompassSort {

	/**
	 * 加入排序的属性名称
	 */
	private String name;

	/**
	 * 加入排序的属性类型
	 */
	private SortPropertyType type;

	/**
	 * 加入排序的方向
	 */
	private SortDirection direction;

	/**
	 * 构造函数.
	 * 
	 * @param sortParamName
	 *            增加的排序名
	 * @param paramType
	 *            增加的排序类型, 现主要定义了三种类型: int、float 和 string. 其他的都被定义为 {@link SortPropertyType#AUTO}
	 * @param isAscend
	 *            顺序还是倒序排序
	 */
	public CompassSort(String sortParamName, String paramType, boolean isAscend) {
		
		Assert.isTrue(StringUtils.isNotBlank(sortParamName));
		this.name = sortParamName;

		// 注意到 SortPropertyType 只提供了 3 种类型, 其余为 Auto
		if ("int".equalsIgnoreCase(paramType)) {
			type = SortPropertyType.INT;
		} else if ("float".equalsIgnoreCase(paramType)) {
			type = SortPropertyType.FLOAT;
		} else if ("string".equalsIgnoreCase(paramType)) {
			type = SortPropertyType.STRING;
		} else {
			type = SortPropertyType.AUTO;
		}

		if (isAscend) {
			direction = SortDirection.AUTO;
		} else {
			direction = SortDirection.REVERSE;
		}
	}

	public String getName() {
		return name;
	}

	public SortPropertyType getType() {
		return type;
	}

	public SortDirection getDirection() {
		return direction;
	}
}
